
package model;

import controle.GerenciadorArquivos;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

/**
 *
 * @author Marcos Vinicius Rogowski
 *
 */
public class FuncionarioDAO implements OperacoesDAO{
	private HashMap<String, Funcionario> funcionarios = new HashMap();
    private static FuncionarioDAO instancia = null;
    
    public static FuncionarioDAO newInstance(){
        if (instancia == null){
            instancia = new FuncionarioDAO();
        }
        return instancia;
    }

    private FuncionarioDAO() {
        if (funcionarios.isEmpty()) {
            Object obj = GerenciadorArquivos.lerDados("funcionarios.dat");
            if (obj instanceof HashMap) {
                funcionarios = (HashMap) obj;
            }
        }
    }

    /*
     * @param obj é o Usuário que será inserido no mapa
     */
    @Override
    public void inserir(Object obj) {
        if (obj instanceof Funcionario) {
            Funcionario func = (Funcionario) obj;
            String chave = func.getRg();
            funcionarios.put(chave, func);
        }
    }

    /*
     * @param obj é a chave de loalização
     */
    @Override
    public boolean excluir(Object obj) {
        if (obj instanceof String) {
            String chave = (String) obj;
            Funcionario func = funcionarios.remove(chave);
            if (func != null) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void editar(Object obj) {
        if (obj instanceof Funcionario) {
            Funcionario novo = (Funcionario) obj; // Com os dados a serem alterados
            String chave = novo.getRg();
            funcionarios.put(chave, novo);
        }
    }

    /*
     * Retorna a lista de todos os usuários cadastrados
     */
    @Override
    public ArrayList pequisar() {
        Collection<Funcionario> lista = funcionarios.values();
        ArrayList retorno = new ArrayList(lista);
        return retorno;
    }

    public Funcionario pesquisar(String chave) {
        Funcionario func = funcionarios.get(chave);
        return func;
        // Se não encontrar a chave retorna null;
    }

    public Funcionario pesquisar(String email, String senha) {
        Collection<Funcionario> lista = funcionarios.values();
        Iterator<Funcionario> it = lista.iterator();
        while (it.hasNext()) {
            Funcionario func = it.next();
            if ((func.getEmail().equals(email))
                    && (func.getSenha().equals(senha))) {
                return func;
            }
        }
        return null;
    }
    
    public void finalizar(){
        GerenciadorArquivos.gravarDados("funcionarios.dat", funcionarios);
    }	
}
